{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "2971746e",
   "metadata": {},
   "source": [
    "# Extension example 1: Boudary Condition"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cba1c2b8",
   "metadata": {},
   "source": [
    "For some applications, we want to constrain the function space of KANs. This notebook investigates when there are boundary conditions, we can hard code this information into KANs. This can be done by defining a new class MyKAN that inherits the KAN class. The forward() method needs to be overridden."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fb2a4e1f",
   "metadata": {},
   "source": [
    "Example 1: $f(x), x\\in [0,1], f(0)=0, f(1)=0$. To construct the condition, we set $f(x)=x(1-x)\\cdot {\\rm KAN}(x)$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "ef203d38",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "checkpoint directory created: ./model\n",
      "saving model version 0.0\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x7ff13c782640>"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from kan import *\n",
    "\n",
    "class MyKAN(KAN):\n",
    "    \n",
    "    def __init__(self, width=None, grid=3, k=3, seed=1):\n",
    "        super(MyKAN, self).__init__(width, grid, k, seed=seed)\n",
    "        \n",
    "    def forward(self, x):\n",
    "        y_kan = super(MyKAN, self).forward(x)\n",
    "        y_mtp = x * (1 - x)\n",
    "        return y_kan * y_mtp\n",
    "    \n",
    "model = MyKAN(width=[1,1], seed=1)\n",
    "x = torch.linspace(0,1,steps=1001)[:,None]\n",
    "plt.plot(x.detach().numpy(), model(x).detach().numpy())\n",
    "plt.scatter([0,1],[0,0], color='red')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cc9ea0cb",
   "metadata": {},
   "source": [
    "Example 2: $f(x), x\\in [0,1], f(t_0)=y_0, f(t_1)=y_1$. To construct the condition, we set $f(x)=(x-t_0)(t_1-x)\\cdot {\\rm KAN}(x) + (y_1-y_0)/(t_1-t_0) * (x-t_0) + y_0$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "c439b796",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "checkpoint directory created: ./model\n",
      "saving model version 0.0\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x7ff13c936a60>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiwAAAGdCAYAAAAxCSikAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA+7UlEQVR4nO3dd3wUdeLG8Wc3HUgCoSSEhN5BQiCEJiqeB6KCigpKR1Cxgp4Nezl/HLYDBPUOgUiLhWblBD1pikAgoSMlAQIkQCjZFFJ3fn9wRCPFBJKdLZ/367WvS2a/G56dS3YeZ74zYzEMwxAAAIATs5odAAAA4M9QWAAAgNOjsAAAAKdHYQEAAE6PwgIAAJwehQUAADg9CgsAAHB6FBYAAOD0vM0OUFHsdruOHDmiwMBAWSwWs+MAAIAyMAxDWVlZCg8Pl9V68f0oblNYjhw5osjISLNjAACAy5CamqqIiIiLPu82hSUwMFDS2TccFBRkchoAAFAWNptNkZGRJdvxi3GbwnLuMFBQUBCFBQAAF/Nn0zmYdAsAAJwehQUAADg9CgsAAHB6FBYAAOD0KCwAAMDpUVgAAIDTo7AAAACnR2EBAABOj8ICAACcHoUFAAA4PQoLAABwehQWAADg9Nzm5ocAALiComK7TuYW6HhWvjKyC3QiO185+UU6U1isMwV25RYWqbDIkLeXRVaLRd5Wi7ysFlXz81ZwgI+CAnwUHOCjmtV8FV49QNX8PGNT7hnvEgAABzIMQ0cy87TjiE0pGdlKycjV/owcHTiRozRbngyj4v6t4AAf1aseoHo1AtSkdjW1DAtUi7BANaldTb7e7nMghcICAMAVysjO14aUk0pKPa1tRzK1/YhNp3MLLzreYpFqVvVVrWp+qlXNT4H+3grw8ZK/r5cCfLzk42WV3TBUVGyc/V+7Xdl5Rco8U1jyyMguKPX9jjSblutoyb/hbbWoaZ1q6tCghmIa1FBMgxBFhgTIYrE4YpVUOAoLAADldCI7X6v3ZGhdykmtTzmhfcdzzhvjbbWoWWigmtappkY1q6hBzapqWKuqIkMCVLOqn7ysV14csvOLdPjUGR0+natDp85o99Es/ZqepV3pWcrKK9Ku/309f91BSVLtQD91a1JTPVvU0TXNayukqu8VZ3AUi2FU5I4p89hsNgUHByszM1NBQUFmxwEAuBHDMLT9iE3/3XVM/911TJsPnT7vsE7LsEDFNKyhtuHBahMerOZh1eTn7WVa3rTMPG05lKmNB04q4cApbTucqcLi30JbLFJURHX1bFFHN7erq6Z1ql34hxUXS6tXS2lpUt26Uo8eklfFva+ybr/LXVhWrVqlt956Sxs3blRaWpoWL16s22677aLjFy1apA8++EBJSUnKz89XmzZt9Morr6h3796lxi1cuFAvvvii9u3bpyZNmuiNN97Q7bffXuZcFBYAQEUyDEOJqaf11eYj+nZrmo7a8ks937pukK5uVkuxDUMU07CGqldx7r0VeYXFSjx4Wqv2HNeKX49rZ5qt1POt6gapb1Rd9W0XrsiQKmcXLlokjR0rHTr028CICGnyZKl//wrJVWmFZenSpfrpp5/UoUMH3XHHHX9aWMaNG6fw8HD17NlT1atX16xZs/T2229r3bp1io6OliStXbtWPXr00Ouvv67bb79dixcv1ksvvaQ1a9aoc+fOFfqGAQC4lB1HbPpy8xF9veWIDp06U7K8iq+Xrm5aS9e3rKPrWtRRWLC/iSmvXHpmnlb8ekzfbU/X6j0ZKrL/Vgc6NayhQdZj6vPI3fIvLF3UdG4OzIIFFVJaKq2wlHqxxfKnheVC2rRpo4EDB+qll16SJA0cOFA2m01Lly4tGXPjjTeqRo0aio+PL9PPpLAAAC5XVl6hvkg6ok82HNS2w7/teajq66W/tg5V36hwXd2slmmHeCrbqZwCfbc9XV9tOaK1+07oXHcJPpOl/tv/q0FJ/1GzE6m/vcBiObunJSXlig8PlXX77fBJt3a7XVlZWQoJCSlZtnbtWj3++OOlxvXu3VuTJk266M/Jz89Xfv5vrc9ms110LAAAf2QYhjYdPK1P1h/U11vSdKawWJLk62XV9S3rqF/7cPVsUUcBvu5ZUn6vRlVf3R1bX3fH1ld6Zp4+X7BKnyQc1uHgOpoVc6tmxdyq7vuT9MzKOLVL3ysZhpSaenZuy3XXOSSjwwvLO++8o5ycHA0YMKBkWXp6ukJDQ0uNCw0NVXp6+kV/zoQJE/Tqq69WWk4AgHsqLLbr261pmrkmRZsPZZYsb1qnmu7uFKn+HSJc6uyZihYW7K9Hq5zQQ/8arVWNojU/6kb90DRWPzVsL/uqP1zXJS3NYbkcWlji4+P1yiuv6IsvvlCdOnVKPffH88INw7jkueLjx4/XE088UfK9zWZTZGRkxQYGALiNzNxCxW84qI9/3q+0zDxJkq+3VX3bheue2Eh1bFDDZa9RUuHq1pWXYVfP5I3qmbxRh4Jqa3mzLmqftvu8cY7isMLy6aefatSoUfr88891ww03lHouLCzsvL0px44dO2+vy+/5+fnJz8+vUrICANxHRna+Plqdojlr9yun4Oxhn1rVfDW0S0MN7lJftaqxLTlPjx5n56gcPiwZhiJsxzVy41e/PX9uDkuPHg6L5JDCEh8fr3vvvVfx8fG6+eabz3u+a9euWr58eal5LMuWLVO3bt0cEQ8A4IaO2fL071XJmrvugPIK7ZLOXivl3qsbqV9UuPx93H9uymXz8jp76vKdd54tJ78/P+fcXqhJkyr0eix/ptyFJTs7W3v37i35PiUlRUlJSQoJCVH9+vU1fvx4HT58WLNnz5Z0tqwMGzZMkydPVpcuXUr2pAQEBCg4OFiSNHbsWF1zzTWaOHGibr31Vn3xxRf6/vvvtWbNmop4jwAAD3I8K1/Tftyr+PUHlV90tqhERQTr0eub6S+t6nDYp6z69z976vKFrsMyaVKFXYelrMp9WvOKFSvUs2fP85YPHz5ccXFxGjFihPbv368VK1ZIkq677jqtXLnyouPPWbBggV544QUlJyeXXDiufzlWBqc1A4Bny84v0vRVyZq+Olm5/zv007FBDT32l2a6plktisrlctUr3TorCgsAeKaCIrvmrzug9/67VydyCiSd3aPyVO+W6t60JkXFyTntdVgAAKgIhmFo6bZ0/WPpLh08mStJalyrqp7s3UJ92oZRVNwMhQUA4HJ2pdv06pc7tDb5hKSzdyEed0MzDYiJlI+X9U9eDVdEYQEAuIzTuQX65/LdmrvuoIrthvy8rXrg2iYac21jVfFlk+bO+H8XAOD07HZDn2xI1Vvf7dKp3EJJUp+2YXrupla/3VkYbo3CAgBwanuOZmn8oq1KOHBKktQ8tJpe6dtG3ZrWMjkZHInCAgBwSnmFxXp/xT59sGKvCosNVfH10t96tdDwrg3kzTwVj0NhAQA4nV+ST+i5xVuVfDxHkvSXlnX02m1tVa96gMnJYBYKCwDAaWTnF+mNb3Yqfv1BSWfP/nm1XxtOUwaFBQDgHNbuO6GnFmzWoVNnJEmDOtfXMze2VHCAj8nJ4AwoLAAAU50pKNab3+3SrJ/2S5IiagTorTuj1LVJTXODwalQWAAAptl08JSe/GyzkjPOzlW5JzZSz9/cWtX82DyhNH4jAAAOV1Rs1+Qf9mjaj3tlN6TQID/944526tmijtnR4KQoLAAAh0o9mauxnyRq08HTkqTb2ofr1X5tFVyFuSq4OAoLAMBhvt5yROMXbVVWXpEC/bz1f/2vUt+ocLNjwQVQWAAAlS63oEivfbVDn2xIlSRF16+uKXdHc1l9lBmFBQBQqXYcsenR+E3adzxHFov08HVNNfaGZtxVGeVCYQEAVJpPNxzUi19sV0GRXaFBfvrnwPbq1oR7AKH8KCwAgAqXV1isF5ds0+cbD0mSrm9ZR2/fFaWQqr4mJ4OrorAAACrU/owcPThvk3am2WS1SH/r1UIPXttEViuX1sflo7AAACrMd9vT9eRnm5WVX6SaVX313j3R6taUQ0C4chQWAMAVKyq2661lv+pfK5MlSTENamjqoA4KC/Y3ORncBYUFAHBFTucW6NH4RK3ekyFJGnV1Iz3bpyVnAaFCUVgAAJdt99Es3Tc7QQdO5CrAx0tv3xWlm9vVNTsW3BCFBQBwWZbvOKpxnyQqp6BYETUCNH1YjFrVDTI7FtwUhQUAUC6GYWjaj3v1zvLdMgypS+MQvT+4I6cso1JRWAAAZZZbUKSnPt+ib7amSZKGdW2gF29pzXwVVDoKCwCgTNIyz2hUXIJ2pNnk42XRa7e21T2x9c2OBQ9BYQEA/KlthzM16uMNOmrLV82qvvpwaEd1ahhidix4EAoLAOCSvt9xVI99kqjcgmI1q1NNM0d04i7LcDgKCwDgomb9lKLXv94huyH1aFZL0wZ3UJC/j9mx4IEoLACA8xQV2/X61zv08doDkqR7YiP12q1tmVwL01BYAAClZOcX6bH4RP131zFJ0vg+LXX/NY1lsXDzQpiHwgIAKHHUlqeRszZoR5pNft5WTRrYXn2u4sq1MB+FBQAgSdp7LFvDZ67X4dNnVKuarz4a3kntI6ubHQuQRGEBAEjaeOCURn28QadzC9W4VlV9fG8sZwLBqVBYAMDD/bDzqB6ev0l5hXa1j6yumSM6cZl9OB0KCwB4sE83HNRzi7ep2G6oZ4vamja4g6r4smmA8+G3EgA8kGEYmvrfszcwlKQ7O0ZoQv+rOG0ZTovCAgAepthu6OUvt2nuLwclSY/0bKq/9WrOactwahQWAPAg+UXFGvdJkpZuS5fFIr3ar42GdW1odizgT1FYAMBD5BYU6f7ZG7Vmb4Z8vayadHd73cQ1VuAiKCwA4AEycws1Mm69Nh08rSq+XvpoWIy6Na1ldiygzCgsAODmjmfla+iMddqVnqXgAB/Fjeyk6Po1zI4FlAuFBQDc2KFTuRo6Y71SMnJUO9BPc0bFqmVYkNmxgHKjsACAm9p3PFtDP1qnI5l5qlc9QPNGd1bDWlXNjgVcFgoLALihbYczNXzmep3IKVCT2lU1d3Rn1Q0OMDsWcNkoLADgZhL2n9TIuA3KyitS23pB+nhkrGpW8zM7FnBFKCwA4EZ+2puh0R8n6ExhsWIbhuijETEK8vcxOxZwxSgsAOAmVu4+rvtnJyi/yK5rm9fWh0M6KsDXy+xYQIWgsACAG/hh51E9OHeTCortuqFVqKYNjpafN2UF7oPCAgAu7j/b0vVo/CYVFhvq0zZMk++Olq83NzGEe6GwAIAL+2rzEY37NEnFdkN9o8L1zwFR8uaOy3BDFBYAcFGLEw/pb59tlt2Q+neop7fujJKXlTsuwz1RwwHABX2WkKon/ldW7u4UqbcpK3Bz7GEBABczb90BPb94myRpSJf6eq1fW1kpK3BzFBYAcCFxP6Xola92SJJGdm+ol25pLYuFsgL3R2EBABfx+7LywLWN9eyNLSkr8BgUFgBwAbPX7i8pKw/3bKIne7WgrMCjMOkWAJzcnF8O6KUvtkuSHrqOsgLPRGEBACc2b90Bvbjk7ATbB65trKd6U1bgmSgsAOCk4tcfLDkb6P5rmLMCz0ZhAQAn9OmGgxq/aKskadTVjTS+D2UFno3CAgBO5rOEVD37v7IysntDvXBzK8oKPB6FBQCcyIKNh/TMwi0yDGlEN66zApxDYQEAJ7Fo0yE9tWCzDEMa1rWBXu5LWQHOobAAgBNYknhYf/v8bFkZ0qW+Xu3XhrIC/A6FBQBM9s2WND3xWZIMQ7on9uy9gSgrQGkUFgAw0fc7jmrsJ4myG9KAmAi9cRs3MgQuhMICACZZvee4Hpq3SUV2Q7e2D9eE/u0oK8BFUFgAwAS/JJ/QfbMTVFBsV5+2YXrnrih5UVaAi6KwAICDbTp4SqPiNiiv0K6eLWpr8t3R8vbi4xi4lHL/haxatUp9+/ZVeHi4LBaLlixZcsnxaWlpGjRokFq0aCGr1apx48adNyYuLk4Wi+W8R15eXnnjAYBT23Y4U8NnrldOQbG6N62pD4Z0lK83ZQX4M+X+K8nJyVFUVJSmTp1apvH5+fmqXbu2nn/+eUVFRV10XFBQkNLS0ko9/P39yxsPAJzW7qNZGjpjnbLyitSpYQ1NHxYjfx8vs2MBLsG7vC/o06eP+vTpU+bxDRs21OTJkyVJM2fOvOg4i8WisLCw8sYBAJeQfDxbg6av06ncQkVFBGvmiE6q4lvuj2DAYznNfsjs7Gw1aNBAERERuuWWW5SYmHjJ8fn5+bLZbKUeAOCMUk/mavBH65SRna9WdYP08b2xCvT3MTsW4FKcorC0bNlScXFx+vLLLxUfHy9/f391795de/bsuehrJkyYoODg4JJHZGSkAxMDQNmkZZ7RoI9+UVpmnprWqaa5o2JVvYqv2bEAl+MUhaVLly4aMmSIoqKi1KNHD3322Wdq3ry53nvvvYu+Zvz48crMzCx5pKamOjAxAPy541n5Gjx9nVJPnlHDmlU0f3Rn1azmZ3YswCU55QFUq9WqTp06XXIPi5+fn/z8+MMH4JxO5hRoyEfrlJyRo3rVAzTvvi6qE8SJBMDlcoo9LH9kGIaSkpJUt25ds6MAQLll5RVq+Mz1+vVolkKD/DT/vs6qVz3A7FiASyv3Hpbs7Gzt3bu35PuUlBQlJSUpJCRE9evX1/jx43X48GHNnj27ZExSUlLJa48fP66kpCT5+vqqdevWkqRXX31VXbp0UbNmzWSz2TRlyhQlJSVp2rRpV/j2AMCx8gqLNfrjBG09nKmaVX01b3QXNahZ1exYgMsrd2FJSEhQz549S75/4oknJEnDhw9XXFyc0tLSdPDgwVKviY6OLvl648aNmj9/vho0aKD9+/dLkk6fPq37779f6enpCg4OVnR0tFatWqXY2NjLeU8AYIrCYrsenrdJ61JOKtDPWx/fG6umdaqZHQtwCxbDMAyzQ1QEm82m4OBgZWZmKigoyOw4ADyM3W7oic+StCTpiPy8rZp9b6w6N65pdizA6ZV1++2Uc1gAwJUYhqFXvtquJUlH5G216MMhHSkrQAWjsADAFXp3+W7NXntAFov0zoAo9WxZx+xIgNuhsADAFfhodbLe++/ZExFev7Wtbm1fz+REgHuisADAZfpsQ6r+/s1OSdJTvVtoSJcGJicC3BeFBQAuw9KtaXp20RZJ0gPXNNZD1zUxORHg3igsAFBOq/cc19hPkmQ3pLs7RerZPi1lsVjMjgW4NQoLAJTDpoOn9MCcjSootuvmq+rqjduvoqwADkBhAYAy2pVu04iZ65VbUKwezWrpnwPby8tKWQEcgcICAGVw4ESOhs5YL1tekTo2qKF/De0oX28+QgFH4a8NAP7EUVuehsxYp+NZ+WoZFqiZwzupiq9T3uwecFsUFgC4hFM5BRry0TqlnjyjhjWraM6ozgqu4mN2LMDjUFgA4CKy84s0Im6D9hzLVliQv+aM6qzagX5mxwI8EoUFAC4gr7BY989O0ObU06pRxUdzRsUqMqSK2bEAj0VhAYA/KCq267H4RP2874Sq+nopbmSsmoUGmh0L8GgUFgD4Hbvd0NMLt2jZjqPy9bbqo+GdFBVZ3exYgMejsADA/xiGode+3qFFmw7Ly2rRtEEd1LVJTbNjARCFBQBKTP5hj+J+3i9Jevuudvpr61BzAwEoQWEBAEkz16Ro0vd7JEmv9muj26MjTE4E4PcoLAA83sKNh/Ta1zskSU/8tbmGd2tobiAA56GwAPBoy7an6+mFWyRJ93ZvpEevb2pyIgAXQmEB4LF+3puhR+Ynqthu6M6OEXrh5lbceRlwUhQWAB4pKfW0Rs9OUEGxXb3bhOof/a+SlTsvA06LwgLA4+w+mqURs9Yrt6BY3ZvW1OS7o+Xtxcch4Mz4CwXgUVJP5mrojHU6nVuo9pHV9e+hMfL38TI7FoA/QWEB4DGO2fI0+KN1OmrLV4vQQMWN7KSqft5mxwJQBhQWAB7hdG6Bhs1cr4Mnc1U/pIpmj4pV9Sq+ZscCUEYUFgBuLye/SCPjNmhXepbqBPpp7qjOCg3yNzsWgHKgsABwa/lFxRozd6MSD55WcICP5ozqrPo1q5gdC0A5UVgAuK2iYrvGfZKk1XsyVMXXS3EjO6lFWKDZsQBcBgoLALdkGIaeW7xVS7ely9fLqunDYhRdv4bZsQBcJgoLALdjGIbe+GanPks4JKtFmnJPtLo3rWV2LABXgMICwO1M+3GvPlqTIkmaeEc73dg2zOREAK4UhQWAW5m9dr/eXrZbkvTiLa11V0ykyYkAVAQKCwC3sSTxsF76Yrsk6bHrm2rU1Y1MTgSgolBYALiFH3Ye1d8+3yxJGtGtoR7/a3OTEwGoSBQWAC7vl+QTemjeJhXbDd0eXU8v3dJaFgt3XgbcCYUFgEvbcui0Rn+coPwiu25oVUdv3tlOVitlBXA3FBYALmvP0SwNn7le2flF6tI4RFMHdZCPFx9rgDviLxuAS0o9mauhM9brVG6hoiKC9dHwTvL38TI7FoBKQmEB4HKO2fI0ZMY6pdvy1KxONcWNjFU1P2+zYwGoRBQWAC7ldG6Bhs1crwMnchUZEqA5ozqrRlVfs2MBqGQUFgAuIye/SCPjNmhXepZqB/pp7qjOCgv2NzsWAAegsABwCflFxXpgzkYlHjyt4AAfzR3VWQ1qVjU7FgAHobAAcHpFxXY9Fp+oNXszVMXXS3EjO6lFWKDZsQA4EIUFgFOz2w09u2irvtt+VL7eVn00LEbR9WuYHQuAg1FYADgtwzD0+jc7tGDjIXlZLZp6T7S6Na1ldiwAJqCwAHBak3/Yo1k/7ZckvXVnO/VqE2ZuIACmobAAcEoz16Ro0vd7JEmv9muj/h0iTE4EwEwUFgBO5/OEVL329Q5J0t/+2lzDuzU0NxAA01FYADiV/2xL0zMLt0iSRl/dSI9c39TkRACcAYUFgNNYsydDj8UnyW5IA2Ii9PzNrWSxcOdlABQWAE5i08FTun9OggqK7brpqjBN6N+OsgKgBIUFgOl2ptk0YuZ65RYUq0ezWvrnwPbyslJWAPyGwgLAVCkZORo6Y71seUXq2KCG/jW0o/y8vcyOBcDJUFgAmObQqVwNnv6LMrLz1apukGaO6KQqvt5mxwLghCgsAExx1JanwR+t05HMPDWpXVVzRsUqOMDH7FgAnBSFBYDDncjO15CP1unAiVzVD6mieaO7qFY1P7NjAXBiFBYADpV5plDDZq7XnmPZqhvsr3mjOyss2N/sWACcHIUFgMPk5Bdp5Kz12n7EplrVfDV3dGdFhlQxOxYAF0BhAeAQeYXFGv1xgjYdPK3gAB/NGdVZTWpXMzsWABdBYQFQ6QqK7Hpw7katTT6han7emn1vrFrVDTI7FgAXQmEBUKmKiu0a92mifvz1uPx9rJo5opOiIqubHQuAi6GwAKg0druhpxdu0bdb0+XrZdW/h8YotlGI2bEAuCAKC4BKYRiGXvpymxZtOiwvq0VTB0Xrmua1zY4FwEVRWABUOMMwNGHpLs395aAsFundAVHq1SbM7FgAXBiFBUCFm/zDHv17VbIkaWL/drq1fT2TEwFwdRQWABXqXyv3adL3eyRJL/dtrQGdIk1OBMAdUFgAVJiZa1I0YekuSdJTvVtoZPdGJicC4C4oLAAqxJy1+/Xa1zskSY/9pZke7tnU5EQA3AmFBcAVi19/UC9+sV2S9NB1TfT4Dc1MTgTA3VBYAFyRzxNS9dzirZKk+3o00lO9W8hisZicCoC7KXdhWbVqlfr27avw8HBZLBYtWbLkkuPT0tI0aNAgtWjRQlarVePGjbvguIULF6p169by8/NT69attXjx4vJGA+BgSxIP6+mFW2QY0ohuDfXcTa0oKwAqRbkLS05OjqKiojR16tQyjc/Pz1ft2rX1/PPPKyoq6oJj1q5dq4EDB2ro0KHavHmzhg4dqgEDBmjdunXljQfAQb7eckRPfJYkw5AGd66vl/u2pqwAqDQWwzCMy36xxaLFixfrtttuK9P46667Tu3bt9ekSZNKLR84cKBsNpuWLl1asuzGG29UjRo1FB8fX6afbbPZFBwcrMzMTAUFcVM1oDL9Z1u6Hp6/ScV2QwNjIjWh/1WyWikrAMqvrNtvp5jDsnbtWvXq1avUst69e+vnn3++6Gvy8/Nls9lKPQBUvu93HNWj8WfLSv8O9SgrABzCKQpLenq6QkNDSy0LDQ1Venr6RV8zYcIEBQcHlzwiI7k4FVDZfvz1mB6at0mFxYb6RYXrrTujKCsAHMIpCouk8459G4ZxyePh48ePV2ZmZskjNTW1siMCHm3Nngw9MGejCort6tM2TO8OiJIXZQWAg3ibHUCSwsLCztubcuzYsfP2uvyen5+f/Pz8KjsaAElr953Q6NkbVFBk119bh2rKPdHy9nKa/94B4AGc4hOna9euWr58eally5YtU7du3UxKBOCctftO6N64DcortKtni9qaOihaPpQVAA5W7j0s2dnZ2rt3b8n3KSkpSkpKUkhIiOrXr6/x48fr8OHDmj17dsmYpKSkktceP35cSUlJ8vX1VevWrSVJY8eO1TXXXKOJEyfq1ltv1RdffKHvv/9ea9asucK3B+BK/Lwvo6SsXNO8tj4Y0lF+3l5mxwLggcp9WvOKFSvUs2fP85YPHz5ccXFxGjFihPbv368VK1b89o9cYC5KgwYNtH///pLvFyxYoBdeeEHJyclq0qSJ3njjDfXv37/MuTitGahYP+/N0L0fny0r1zavrX8N7Sh/H8oKgIpV1u33FV2HxZlQWICK89PeDI36+LfDQB8MoawAqBxl3X47xaRbAM5jzZ6zZSW/6GxZ+XAoh4EAmI/CAqDE6j3HNfrjBOUX2XV9yzr6YEgHygoAp8BUfwCSpFW7fysrN7SirABwLuxhAaCVu4/rvtkJKiiy64ZWoZo2OJqyAsCpUFgAD7fi12O6f87GkovCTRvUQb7e7HwF4Fz4VAI82O/LSi/KCgAnxh4WwEP9sPOoHpy7SQXFdvVuE6r37qGsAHBeFBbAAy3dmqZH4xNVZDd0Y5swvcfl9gE4OT6hAA+zJPGwHvlfWekXFU5ZAeAS2MMCeJBPNxzUs4u2yjCkuzpG6B93tJOX9fxbZwCAs6GwAB5i9tr9eumL7ZKkIV3q67V+bWWlrABwERQWwANMX5WsN77dKUkadXUjvXBzqwvelBQAnBWFBXBz7/2wR+8s3y1JeqRnU/2tV3PKCgCXQ2EB3JRhGHp72a+a9uM+SdLf/tpcj/6lmcmpAODyUFgAN2QYhv7+zU7NWJMiSXr+pla675rGJqcCgMtHYQHcjN1u6KUvt2nuLwclSa/d2kbDujY0NxQAXCEKC+BGCovtenrBFi1OPCyLRZrYv50GdIo0OxYAXDEKC+Am8gqL9cj8Tfp+5zF5Wy16Z0CUbm1fz+xYAFAhKCyAG8jOL9Lojzfol+ST8vO26oMhHXR9y1CzYwFAhaGwAC7uZE6BRsxary2HMlXNz1sfDY9Rl8Y1zY4FABWKwgK4sPTMPA2dsU57jmWrRhUfzb63s66KCDY7FgBUOAoL4KL2Z+RoyIx1OnTqjOoG+2vOqFg1rRNodiwAqBQUFsAF7UyzaeiM9crIzlfDmlU0d3RnRdSoYnYsAKg0FBbAxWw8cEojZ62XLa9IreoGafa9saod6Gd2LACoVBQWwIWs3nNc98/eqDOFxerYoIZmjuik4AAfs2MBQKWjsAAu4oukw3ry880qLDbUo1kt/WtoR1Xx5U8YgGfg0w5wAR+tTtbfv9kpSeobFa6372onP28vk1MBgONQWAAnZrcbmvifXfrXqmRJ0sjuDfXiza1ltVpMTgYAjkVhAZxUYbFdzyzYokWJhyVJz9zYUmOubSyLhbICwPNQWAAnlJNfpAfnbdKq3cflZbVo4h3tdGfHCLNjAYBpKCyAkzmRna974zZo86FMBfh46f3BHdSzZR2zYwGAqSgsgBNJPZmrYTPXKyUjRzWq+GjmiE6Krl/D7FgAYDoKC+Akth/J1IhZG3Q8K1/1qgdo9qhYNaldzexYAOAUKCyAE1izJ0MPzt2orPwitQwL1Mf3xio0yN/sWADgNCgsgMk+25Cq5xZvVZHdUGyjEE0fFsPVawHgDygsgEkMw9C7y3frvf/ulSTd2j5cb97JBeEA4EIoLIAJCorsembhFi3+3zVWHunZVE/8tTkXhAOAi6CwAA6WmVuoB+Ym6Jfkk/KyWvTGbW11d2x9s2MBgFOjsAAOlHoyVyPjNmjvsWxV9fXS+0M66trmtc2OBQBOj8ICOMiWQ6d1b1yCMrLzFRbkr5kjOql1eJDZsQDAJVBYAAf4fsdRPRqfqDOFxWoZFqhZIzupbnCA2bEAwGVQWIBKZBiGPv55v177eofshtSjWS29P7iDAv05bRkAyoPCAlSSwmK7Xv1qu+b+clCSNDAmUn+/va18vKwmJwMA10NhASpBZm6hHp6/SWv2ZshikZ69saXuv6axLBZOWwaAy0FhASpYSkaORn28QcnHc1TF10uTBrZXrzZhZscCAJdGYQEq0M/7MvTg3E3KPFOo8GB/fTScM4EAoCJQWIAKEr/+oF5csk1FdkPtI6vr38M6qk4gNzAEgIpAYQGuULHd0P99u1Mz1qRIkvpFnb0nkL8P9wQCgIpCYQGuQFZeoR6LT9SPvx6XJD1+Q3M99pemTK4FgApGYQEuU+rJXI3+OEG/Hs2Sn7dV7wyI0i3tws2OBQBuicICXIaf92bo4fmbdCq3UHUC/TR9WIyiIqubHQsA3BaFBSiHc1euff2bnSq2G7qqXrD+Pawjl9kHgEpGYQHKKL+oWC8s3qbPNx6SJN0eXU8T+l/F5FoAcAAKC1AGR215emDORiWlnpbVIj13UyuNuroRk2sBwEEoLMCfSDx4Sg/M2ahjWfkKDvDR1EHR6tGsttmxAMCjUFiAS/gsIVUvLN6mgmK7modW0/RhMWpQs6rZsQDA41BYgAsoLLbrjW92Ku7n/ZKkXq1D9e7A9qrmx58MAJiBT1/gD07mFOjheZu0NvmEJGncDc302PXNZLUyXwUAzEJhAX5n+5FMPTBnow6dOqOqvl56d2B79eZOywBgOgoL8D8LNx7Sc4u3Kr/IrgY1q2j6sBg1Dw00OxYAQBQWQAVFdr3+9Q7N+eWAJKlni9qaNDBawVV8TE4GADiHwgKPlp6ZpwfnbVTiwdOyWKSxf2G+CgA4IwoLPNYvySf0yPxNysguUJC/tybfHa2eLeuYHQsAcAEUFngcwzA0Y02KJizdpWK7oVZ1g/ThkA5cXwUAnBiFBR4lJ79ITy/com+2pEk6ez+g/7v9KgX4cj8gAHBmFBZ4jH3HszVmzkbtOZYtb6tFL97SWsO6NuB+QADgAigs8Aj/2ZauJz/frOz8ItUJ9NMHQzqoY4MQs2MBAMqIwgK3Vmw39PayX/XBin2SpNiGIZo6OFp1Av1NTgYAKA8KC9xWRna+xn2SpDV7MyRJo65upGf7tJSPl9XkZACA8qKwwC39knxCj8Un6lhWvgJ8vDTxznbqFxVudiwAwGWisMCt2O2GPli5T+8s+1V2Q2pWp5reH9xBzbjEPgC4tHLvG1+1apX69u2r8PBwWSwWLVmy5E9fs3LlSnXs2FH+/v5q3LixPvzww1LPx8XFyWKxnPfIy8srbzx4sJM5BRoZt0FvfXe2rPTvUE9fPNKdsgIAbqDce1hycnIUFRWlkSNH6o477vjT8SkpKbrpppt03333ae7cufrpp5/00EMPqXbt2qVeHxQUpF9//bXUa/39mRiJsknYf1KPxicqLTNPft5WvX5rW90VE8EpywDgJspdWPr06aM+ffqUefyHH36o+vXra9KkSZKkVq1aKSEhQW+//XapwmKxWBQWFlbeOPBwdruh6auT9eZ3v6rYbqhxraqaNriDWtUNMjsaAKACVfrpEmvXrlWvXr1KLevdu7cSEhJUWFhYsiw7O1sNGjRQRESEbrnlFiUmJl7y5+bn58tms5V6wLOczi3QfbMTSi6x3y8qXF8+ejVlBQDcUKUXlvT0dIWGhpZaFhoaqqKiImVknD3dtGXLloqLi9OXX36p+Ph4+fv7q3v37tqzZ89Ff+6ECRMUHBxc8oiMjKzU9wHnknjwlG6eskY/7DomX2+r3ri9rSbf3V7V/JhHDgDuyCGf7n+cR2AYRqnlXbp0UZcuXUqe7969uzp06KD33ntPU6ZMueDPHD9+vJ544omS7202G6XFAxiGoZk/7dc/lu5UYbGhhjWraOqgDmpbL9jsaACASlTphSUsLEzp6emllh07dkze3t6qWbPmBV9jtVrVqVOnS+5h8fPzk5+fX4VmhXPLPFOopxds1nfbj0qSbroqTP+4o52C/H1MTgYAqGyVXli6du2qr776qtSyZcuWKSYmRj4+F97QGIahpKQkXXXVVZUdDy5iy6HTenj+JqWePCMfL4teuJkbFwKAJyl3YcnOztbevXtLvk9JSVFSUpJCQkJUv359jR8/XocPH9bs2bMlSWPGjNHUqVP1xBNP6L777tPatWs1Y8YMxcfHl/yMV199VV26dFGzZs1ks9k0ZcoUJSUladq0aRXwFuHKDMPQnF8O6O9f71RBsV2RIQGaNqiD2kVUNzsaAMCByl1YEhIS1LNnz5Lvz80jGT58uOLi4pSWlqaDBw+WPN+oUSN9++23evzxxzVt2jSFh4drypQppU5pPn36tO6//36lp6crODhY0dHRWrVqlWJjY6/kvcHFZeUV6tmFW/XN1jRJUq/WoXrrrigFB3AICAA8jcU4NwPWxdlsNgUHByszM1NBQZzW6uq2H8nUw/M2af+JXHlbLRp/Uyvd270hh4AAwM2UdfvNOaBwKoZhKH59ql75arsKiuyqVz1A7w2KVof6NcyOBgAwEYUFTiMnv0jPLd6qL5KOSJL+0rKO3hkQpepVfE1OBgAwG4UFTmFXuk0Pzduk5OM58rJa9FTvFrq/R2NZrRwCAgBQWOAEPktI1UtfbFNeoV1hQf56b1C0OjUMMTsWAMCJUFhgmtyCIr24ZLsWbjokSbqmeW39c0CUalbjgoAAgNIoLDDF3mNZenDuJu05li2rRfpbrxZ68NomHAICAFwQhQUOtzjxkJ5btE1nCotVO9BPU+6OVtcmF75NAwAAEoUFDpRXWKxXvtyuTzakSpK6N62pSQOjVTuQQ0AAgEujsMAhko9n66F5m7QrPUsWizT2L8306PXN5MUhIABAGVBYUOm+3HxE4xduUU5BsWpV89WkgdG6ulkts2MBAFwIhQWVJq+wWH//Zofm/nL23lKdG4XovXuiVSfI3+RkAABXQ2FBpThwIkcPzduk7UdskqRHejbVuBuaydvLanIyAIArorCgwi3dmqanF2xRVn6RalTx0T8Httd1LeqYHQsA4MIoLKgwBUV2/d+3OxX3835JUkyDGnpvULTqBgeYGwwA4PIoLKgQqSdz9cj8Tdp8KFOS9MC1jfVkrxby4RAQAKACUFhwxZZtT9eTn2+WLa9IwQE+endAlP7SKtTsWAAAN0JhwWUrLLbrzf/s0vTVKZKk6PrVNXVQB9WrziEgAEDForDgshw5fUaPzN+kTQdPS5JGXd1Iz9zYUr7eHAICAFQ8CgvKbcWvx/T4p0k6lVuoQH9vvXVnlG5sG2Z2LACAG6OwoMyKiu2a9P0eTf1xryTpqnrBmjaog+rXrGJyMgCAu6OwoEyO2fL02CeJ+iX5pCRpaJcGev7mVvL38TI5GQDAE1BY8Kd+3pehx+KTlJGdr6q+XppwRzv1iwo3OxYAwINQWHBRdruh91fs1bvLd8tuSC3DAjVtcAc1qV3N7GgAAA9DYcEFncwp0LhPk7Rq93FJ0l0dI/TarW0V4MshIACA41FYcJ6NB07qkfmJSsvMk7+PVa/d2lYDYiLNjgUA8GAUFpQwDEMfrU7RxP/sUpHdUOPaVfX+4A5qGRZkdjQAgIejsECSlJlbqCcXbNbyHUclSX2jwjWh/1Wq5sevCADAfGyNoC2HTuvh+ZuUevKMfL2serFvaw3pXF8Wi8XsaAAASKKweDTDMDT3lwN6/eudKii2KzIkQO8P6qirIoLNjgYAQCkUFg+Vk1+k8Yu26svNRyRJvVqH6q27ohQc4GNyMgAAzkdh8UB7j2XrwbkbtedYtrytFj3bp6VGXd2IQ0AAAKdFYfEwS7em6cnPNyunoFh1Av30/uAOimkYYnYsAAAuicLiIYqK7Xrzu1/171XJkqTOjUL03qBo1Qn0NzkZAAB/jsLiAY5l5enR+Ylal3L2xoX3X9NYT/duIW8vq8nJAAAoGwqLm0vYf1IPzdukY1n5qubnrbfubKc+V9U1OxYAAOVCYXFThmFo1k/79X/f7lSR3VCzOtX04dCO3LgQAOCSKCxuKCe/SM8s3KKvt6RJOnvV2n/0v0pVuWotAMBFsQVzM388Zfn5m1tpRLeGnLIMAHBpFBY38u3WND31v1OWQ4P8NG0QpywDANwDhcUNFNsNvfndLv1r5W+nLE8d1EG1A/1MTgYAQMWgsLi407kFejQ+Uav3ZEjilGUAgHuisLiwnWk2PTBnow6ezFWAj5fevLOd+kaFmx0LAIAKR2FxUV9vOaKnPt+iM4XFigwJ0L+GxKh1eJDZsQAAqBQUFhfzx/kqPZrV0pS7o1Wjqq/JyQAAqDwUFhfyx/kqD1zTWE8xXwUA4AEoLC6C+SoAAE9GYXEBzFcBAHg6CosTY74KAABnUViclC2vUI/OT9TK3cclMV8FAODZKCxOKCUjR6M/3qB9x3Pk72PVm3dGqR/zVQAAHozC4mTW7MnQw/M3KfNMoeoG+2v6sBi1rRdsdiwAAExFYXEShmFo9toDeu3rHSq2G4quX13/GtpRdQL9zY4GAIDpKCxOoKDIrpe/3K749QclSf2j6+n/+l8lfx8vk5MBAOAcKCwmO5lToAfnbtS6lJOyWKRnb2yp+69pLIvFYnY0AACcBoXFRLuPZmnUxxuUevKMqvl5a/Ld7fWXVqFmxwIAwOlQWEzy/Y6jGvtJonIKilU/pIo+Gh6j5qGBZscCAMApUVgczDAMfbgyWW9+t0uGIXVpHKL3B3dUCBeDAwDgoigsDlRQZNf4RVu1cNMhSdLgzvX1Sr828uFicAAAXBKFxUFO5xbogTlnJ9d6WS16uW9rDeva0OxYAAC4BAqLA+zPyNHIuA1KychRNT9vTR0Ureta1DE7FgAALoPCUsnWp5zU/XMSdDq3UPWqB2jGiBi1DONOywAAlAeFpRItTjykZxZsVUGxXVERwZo+PIYr1wIAcBkoLJXAMAxN+n6PJv+wR5LUp22Y3h3QXgG+XLkWAIDLQWGpYHmFxXpm4RZ9kXREkvTAtY31TO+Wslq5ci0AAJeLwlKBTuYU6P7ZCUo4cEreVotev62t7omtb3YsAABcHoWlguw7nq174zbowIlcBfp764PBHXV1s1pmxwIAwC1QWCrAhv0nNfrjBGWeKVREjQDNGtFJzbjMPgAAFYbCcoWWbk3T2E+TVFBkV/vI6vpoeIxqVfMzOxYAAG6FwnIFZv2Uote+3iHDkG5oFar37onmTCAAACoBheUy2O2GJizdqemrUyRJQ7rU1yt928ibewIBAFApKCyXUlwsrV4tpaVJdetKPXoo35D+9tlmfb0lTZL09I0t9OC1TWSxcNoyAACVpdy7BFatWqW+ffsqPDxcFotFS5Ys+dPXrFy5Uh07dpS/v78aN26sDz/88LwxCxcuVOvWreXn56fWrVtr8eLF5Y1WsRYtkho2lHr2lAYNknr2VGbz1ho28Vt9vSVNPl4W/XNglB66rillBQCASlbuwpKTk6OoqChNnTq1TONTUlJ00003qUePHkpMTNRzzz2nxx57TAsXLiwZs3btWg0cOFBDhw7V5s2bNXToUA0YMEDr1q0rb7yKsWiRdOed0qFDJYsOB9bWXdeN1bosq6pZDcWNjNXt0RHm5AMAwMNYDMMwLvvFFosWL16s22677aJjnnnmGX355ZfauXNnybIxY8Zo8+bNWrt2rSRp4MCBstlsWrp0acmYG2+8UTVq1FB8fHyZsthsNgUHByszM1NBQVdwc8Hi4rN7Vn5XVnbUbqSRd72io4E1FZp1QrNWf6DWiWskLybYAgBwJcq6/a70WaJr165Vr169Si3r3bu3EhISVFhYeMkxP//880V/bn5+vmw2W6lHhVi9ulRZ+alBlAYMnqijgTXVLOOAFs15Uq23/nJ2HAAAcIhKLyzp6ekKDQ0ttSw0NFRFRUXKyMi45Jj09PSL/twJEyYoODi45BEZGVkxgdPSSr7M9fHTY32fUrZfFXU+uFUL5j6telnHzxsHAAAql0POw/3jpNRzR6F+v/xCYy41mXX8+PHKzMwseaSmplZM2Lp1S76sUpivqV9MVP9t/9Xsz15UcH7OBccBAIDKVemnNYeFhZ23p+TYsWPy9vZWzZo1Lznmj3tdfs/Pz09+fpVwRdkePaSICOnwYckw1DV1q7qmbv3teYvl7PM9elT8vw0AAC6o0vewdO3aVcuXLy+1bNmyZYqJiZGPj88lx3Tr1q2y453Py0uaPPns13/cw3Pu+0mTmHALAIADlbuwZGdnKykpSUlJSZLOnraclJSkgwcPSjp7qGbYsGEl48eMGaMDBw7oiSee0M6dOzVz5kzNmDFDTz75ZMmYsWPHatmyZZo4caJ27dqliRMn6vvvv9e4ceOu7N1drv79pQULpHr1Si+PiDi7vH9/c3IBAOChyn1a84oVK9SzZ8/zlg8fPlxxcXEaMWKE9u/frxUrVpQ8t3LlSj3++OPavn27wsPD9cwzz2jMmDGlXr9gwQK98MILSk5OVpMmTfTGG2+ofzmKQYWd1vx7F7jSLXtWAACoOGXdfl/RdVicSaUUFgAAUKmc5josAAAAV4rCAgAAnB6FBQAAOD0KCwAAcHoUFgAA4PQoLAAAwOlRWAAAgNOjsAAAAKdHYQEAAE6v0u/W7CjnLthrs9lMTgIAAMrq3Hb7zy687zaFJSsrS5IUGRlpchIAAFBeWVlZCg4OvujzbnMvIbvdriNHjigwMFAWi6XCfq7NZlNkZKRSU1O5R1ElYj07DuvaMVjPjsF6dozKXM+GYSgrK0vh4eGyWi8+U8Vt9rBYrVZFRERU2s8PCgrij8EBWM+Ow7p2DNazY7CeHaOy1vOl9qycw6RbAADg9CgsAADA6VFY/oSfn59efvll+fn5mR3FrbGeHYd17RisZ8dgPTuGM6xnt5l0CwAA3Bd7WAAAgNOjsAAAAKdHYQEAAE6PwgIAAJwehUXS+++/r0aNGsnf318dO3bU6tWrLzl+5cqV6tixo/z9/dW4cWN9+OGHDkrq2sqznhctWqS//vWvql27toKCgtS1a1d99913Dkzrusr7+3zOTz/9JG9vb7Vv375yA7qR8q7r/Px8Pf/882rQoIH8/PzUpEkTzZw500FpXVd51/O8efMUFRWlKlWqqG7duho5cqROnDjhoLSuadWqVerbt6/Cw8NlsVi0ZMmSP32Nw7eFhof75JNPDB8fH2P69OnGjh07jLFjxxpVq1Y1Dhw4cMHxycnJRpUqVYyxY8caO3bsMKZPn274+PgYCxYscHBy11Le9Tx27Fhj4sSJxvr1643du3cb48ePN3x8fIxNmzY5OLlrKe96Puf06dNG48aNjV69ehlRUVGOCeviLmdd9+vXz+jcubOxfPlyIyUlxVi3bp3x008/OTC16ynvel69erVhtVqNyZMnG8nJycbq1auNNm3aGLfddpuDk7uWb7/91nj++eeNhQsXGpKMxYsXX3K8GdtCjy8ssbGxxpgxY0ota9mypfHss89ecPzTTz9ttGzZstSyBx54wOjSpUulZXQH5V3PF9K6dWvj1VdfrehobuVy1/PAgQONF154wXj55ZcpLGVU3nW9dOlSIzg42Dhx4oQj4rmN8q7nt956y2jcuHGpZVOmTDEiIiIqLaO7KUthMWNb6NGHhAoKCrRx40b16tWr1PJevXrp559/vuBr1q5de9743r17KyEhQYWFhZWW1ZVdznr+I7vdrqysLIWEhFRGRLdwuet51qxZ2rdvn15++eXKjug2Lmddf/nll4qJidGbb76pevXqqXnz5nryySd15swZR0R2SZeznrt166ZDhw7p22+/lWEYOnr0qBYsWKCbb77ZEZE9hhnbQre5+eHlyMjIUHFxsUJDQ0stDw0NVXp6+gVfk56efsHxRUVFysjIUN26dSstr6u6nPX8R++8845ycnI0YMCAyojoFi5nPe/Zs0fPPvusVq9eLW9vj/44KJfLWdfJyclas2aN/P39tXjxYmVkZOihhx7SyZMnmcdyEZeznrt166Z58+Zp4MCBysvLU1FRkfr166f33nvPEZE9hhnbQo/ew3KOxWIp9b1hGOct+7PxF1qO0sq7ns+Jj4/XK6+8ok8//VR16tSprHhuo6zrubi4WIMGDdKrr76q5s2bOyqeWynP77TdbpfFYtG8efMUGxurm266Se+++67i4uLYy/InyrOed+zYoccee0wvvfSSNm7cqP/85z9KSUnRmDFjHBHVozh6W+jR/0lVq1YteXl5ndfUjx07dl5zPCcsLOyC4729vVWzZs1Ky+rKLmc9n/Ppp59q1KhR+vzzz3XDDTdUZkyXV971nJWVpYSEBCUmJuqRRx6RdHajahiGvL29tWzZMl1//fUOye5qLud3um7duqpXr56Cg4NLlrVq1UqGYejQoUNq1qxZpWZ2RZeznidMmKDu3bvrqaeekiS1a9dOVatWVY8ePfT3v/+dveAVxIxtoUfvYfH19VXHjh21fPnyUsuXL1+ubt26XfA1Xbt2PW/8smXLFBMTIx8fn0rL6souZz1LZ/esjBgxQvPnz+f4cxmUdz0HBQVp69atSkpKKnmMGTNGLVq0UFJSkjp37uyo6C7ncn6nu3fvriNHjig7O7tk2e7du2W1WhUREVGpeV3V5azn3NxcWa2lN21eXl6SftsDgCtnyraw0qbzuohzp8zNmDHD2LFjhzFu3DijatWqxv79+w3DMIxnn33WGDp0aMn4c6dyPf7448aOHTuMGTNmcFpzGZR3Pc+fP9/w9vY2pk2bZqSlpZU8Tp8+bdZbcAnlXc9/xFlCZVfedZ2VlWVEREQYd955p7F9+3Zj5cqVRrNmzYzRo0eb9RZcQnnX86xZswxvb2/j/fffN/bt22esWbPGiImJMWJjY816Cy4hKyvLSExMNBITEw1JxrvvvmskJiaWnD7uDNtCjy8shmEY06ZNMxo0aGD4+voaHTp0MFauXFny3PDhw41rr7221PgVK1YY0dHRhq+vr9GwYUPjgw8+cHBi11Se9Xzttdcaks57DB8+3PHBXUx5f59/j8JSPuVd1zt37jRuuOEGIyAgwIiIiDCeeOIJIzc318GpXU951/OUKVOM1q1bGwEBAUbdunWNwYMHG4cOHXJwatfy448/XvIz1xm2hRbDYB8ZAABwbh49hwUAALgGCgsAAHB6FBYAAOD0KCwAAMDpUVgAAIDTo7AAAACnR2EBAABOj8ICAACcHoUFAAA4PQoLAABwehQWAADg9CgsAADA6f0/ps8Hvakh0b4AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from kan import *\n",
    "\n",
    "t0 = 0\n",
    "t1 = 1\n",
    "y0 = 1\n",
    "y1 = 1.2\n",
    "\n",
    "class MyKAN(KAN):\n",
    "    \n",
    "    def __init__(self, width, t0, t1, y0, y1, grid=3, k=3, seed=1, noise_scale=1.0):\n",
    "        super(MyKAN, self).__init__(width, grid, k, seed=seed)\n",
    "        self.t0 = t0\n",
    "        self.t1 = t1\n",
    "        self.y0 = y0\n",
    "        self.y1 = y1\n",
    "        \n",
    "    def forward(self, x):\n",
    "        y_kan = super(MyKAN, self).forward(x)\n",
    "        y_mtp = (x- self.t0) * (self.t1 - x)\n",
    "        return y_kan * y_mtp + (self.y1 - self.y0)/(self.t1 - self.t0) * (x - self.t0) + self.y0\n",
    "    \n",
    "model = MyKAN(width=[1,1], t0=t0, t1=t1, y0=y0, y1=y1, seed=1)\n",
    "x = torch.linspace(0,1,steps=1001)[:,None]\n",
    "plt.plot(x.detach().numpy(), model(x).detach().numpy())\n",
    "plt.scatter([t0,t1],[y0,y1], color='red')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1170c3a7",
   "metadata": {},
   "source": [
    "Example 3: $f(x,y), x\\in[0,1], y\\in[0,1], f(0,y)=f(1,y)=f(x,0)=f(x,1)=0$. Set $f(x,y)=x(1-x)y(1-y)\\cdot{\\rm KAN}(x,y)$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "dba9aac3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "checkpoint directory created: ./model\n",
      "saving model version 0.0\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/ziming/opt/anaconda3/lib/python3.9/site-packages/torch/functional.py:507: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at /Users/runner/work/pytorch/pytorch/pytorch/aten/src/ATen/native/TensorShape.cpp:3550.)\n",
      "  return _VF.meshgrid(tensors, **kwargs)  # type: ignore[attr-defined]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.colorbar.Colorbar at 0x7ff1391a1a30>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbgAAAGICAYAAAAzsPUeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAABwAUlEQVR4nO29fXRUVZrv/z1VlVTAhrTCmJAWMDj05a27R0NffkQRp5U4qH3xpRu6tWl7VH5w0ZaQOy1GtEV6SRp0mCwNL5NeXFtHeblrISN9F04Tx+koTVoxIm2ro/dOc4Whk5WLPyZBgVSqzv79kVTVs1P7Se2TqhDq1PNx1XKz6zmn9qm3nf2t7/NsRymlIAiCIAg+IzDcAxAEQRCEoUAmOEEQBMGXyAQnCIIg+BKZ4ARBEARfIhOcIAiC4EtkghMEQRB8iUxwgiAIgi+RCU4QBEHwJaHhHoAgCIKQnnPnziESiWR8nsLCQhQVFWVhRBc+MsEJgiBc4Jw7dw7lE7+E9o5YxucqLS3F0aNH82KSkwlOEAThAicSiaC9I4ajrRMxetTgf1nqOu2ivOJTRCIRmeAEQRCEC4fRowIZTXD5hkxwgiAIOUJMuYhlUB4/ptzsDSYHkAlOEAQhR3Ch4GLwM1wmx+YistYVBEEQfIms4ARBEHIEFy4yERkzOzr3kAlOEAQhR4gphVgGe1RncmwuIhKlIAiC4EtkBScIgpAjiMnEGzLBCYIg5AguFGIywVkjEqUgCILgS2QFJwiCkCOIROkNmeAEQRByBHFReiNnJcrNmzejvLwcRUVFqKiowJtvvjncQ8qYuro6fPOb38SoUaNw6aWX4tZbb8XHH3+sxSilsGbNGpSVlWHEiBG47rrr8MEHHwzTiLNDXV0dHMdBdXV1os9v13nixAn84Ac/wJgxYzBy5Ej8xV/8BVpbWxP3++V6o9EoHn30UZSXl2PEiBGYNGkS1q5dC9dN5l/l6rW+8cYb+Pa3v42ysjI4joN//Md/1O63ua7u7m78+Mc/xtixY3HRRRfhv/yX/4J///d/P49XkV/k5AS3a9cuVFdXY/Xq1Th8+DDmzJmD+fPn49ixY8M9tIxobm7G/fffj9/97ndoampCNBpFVVUVvvjii0TMhg0bsHHjRjQ0NODQoUMoLS3FvHnzcPr06WEc+eA5dOgQGhsb8fWvf13r99N1njp1CldffTUKCgrw6quv4sMPP8Tf/u3f4stf/nIixi/Xu379emzduhUNDQ346KOPsGHDBjz11FN49tlnEzG5eq1ffPEFvvGNb6ChocF4v811VVdXY8+ePdi5cycOHDiAzz//HLfccgtiMbttcNws3PIKlYP85//8n9WyZcu0vilTpqiHH354mEY0NHR0dCgAqrm5WSmllOu6qrS0VP385z9PxJw7d04VFxerrVu3DtcwB83p06fV5MmTVVNTk5o7d65asWKFUsp/17lq1Sp1zTXXsPf76Xpvvvlmdc8992h9t99+u/rBD36glPLPtQJQe/bsSfzb5rr+4z/+QxUUFKidO3cmYk6cOKECgYD6p3/6pwEfr7OzUwFQH3x0qTr276WDvn3w0aUKgOrs7MzuE3KBknMruEgkgtbWVlRVVWn9VVVVOHjw4DCNamjo7OwEAFxyySUAgKNHj6K9vV279nA4jLlz5+bktd9///24+eabccMNN2j9frvOvXv3YubMmfjud7+LSy+9FFdeeSV+8YtfJO730/Vec801+Od//md88sknAIAjR47gwIEDuOmmmwD461opNtfV2tqKnp4eLaasrAwzZsywvvaYyvyWT+ScyeTkyZOIxWIoKSnR+ktKStDe3j5Mo8o+SinU1NTgmmuuwYwZMwAgcX2ma//000/P+xgzYefOnXj33Xdx6NChlPv8dJ0A8Mc//hFbtmxBTU0NHnnkEbz99tt48MEHEQ6H8cMf/tBX17tq1Sp0dnZiypQpCAaDiMViePLJJ/H9738fgP9e2zg219Xe3o7CwkJcfPHFKTF++u66kMi5CS6O4zjav5VSKX25zAMPPIDf//73OHDgQMp9uX7tx48fx4oVK7B///4BdxXO9euM47ouZs6ciXXr1gEArrzySnzwwQfYsmULfvjDHybi/HC9u3btwosvvojt27dj+vTpeO+991BdXY2ysjLcfffdiTg/XKuJwVyXl2vP9He0fPsNLuckyrFjxyIYDKb8xdPR0ZHy11Ou8uMf/xh79+7Fv/zLv+Cyyy5L9JeWlgJAzl97a2srOjo6UFFRgVAohFAohObmZjzzzDMIhUKJa8n164wzbtw4TJs2TeubOnVqwhTll9cVAH7yk5/g4Ycfxve+9z187Wtfw+LFi7Fy5UrU1dUB8Ne1Umyuq7S0FJFIBKdOnWJj0uHCQSyD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\n",
      "text/plain": [
       "<Figure size 480x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from kan import *\n",
    "\n",
    "class MyKAN(KAN):\n",
    "    \n",
    "    def __init__(self, width=None, grid=3, k=3, seed=1):\n",
    "        super(MyKAN, self).__init__(width, grid, k, seed=seed)\n",
    "        \n",
    "    def forward(self, x):\n",
    "        y_kan = super(MyKAN, self).forward(x)\n",
    "        y_mtp = x[:,[0]] * (1 - x[:,[0]]) * x[:,[1]] * (1 - x[:,[1]])\n",
    "        return y_kan * y_mtp\n",
    "    \n",
    "model = MyKAN(width=[2,5,1], seed=2)\n",
    "x = torch.linspace(0,1,steps=101)\n",
    "y = torch.linspace(0,1,steps=101)\n",
    "X, Y = torch.meshgrid(x, y)\n",
    "inputs = torch.stack([X.reshape(-1,), Y.reshape(-1,)]).permute(1,0)\n",
    "mat = model(inputs).reshape(101,101)\n",
    "plt.matshow(mat.detach().numpy())\n",
    "plt.colorbar()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "07e45f8f",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
